package net.huashitong.ssydt.provider.exam.service;


import net.huashitong.ssydt.exam.entity.SsExamQuestion;
import net.huashitong.ssydt.exam.entity.vo.ExamQuestion;
import net.huashitong.ssydt.exam.entity.vo.ExamQuestionQueryInVO;
import net.huashitong.ssydt.exam.entity.vo.QuestionCountVO;
import net.huashitong.ssydt.exam.entity.vo.QuestionNotTestVO;
import net.huashitong.ssydt.provider.web.model.PaginationResult;

import java.util.List;

/**
 * 题目表操作服务
 *
 * @author hemj
 * @version 2017/8/25
 */
public interface SsExamQuestionService {

    /**
     * 分页查询题目列表
     *
     * @param examQuestionQueryInVO 分页查询条件
     * @return 分页查询结果
     */
    PaginationResult<SsExamQuestion> paginationQuery(ExamQuestionQueryInVO examQuestionQueryInVO);

    /**
     * 统计国内的题目数
     *
     * @param questionCountVO
     * @return
     */
    int countByDomestic(QuestionCountVO questionCountVO);

    /**
     * 统计国内+本省的题目数
     *
     * @param questionCountVO
     * @return
     */
    int countByDomesticAndTheProvince(QuestionCountVO questionCountVO);

    /**
     * 统计国内+国际的题目数
     *
     * @param questionCountVO
     * @return
     */
    int countByDomesticAndInternational(QuestionCountVO questionCountVO);

    /**
     * 统计国内+国际+本省的题目数
     *
     * @param questionCountVO
     * @return
     */
    int countByDomesticAndInternationalAndTheProvince(QuestionCountVO questionCountVO);

    /**
     * 获取题目信息（包含所有选项列表）
     *
     * @param id 题目ID
     * @return 题目信息
     */
    ExamQuestion getQuestionInfo(Long id);

    /**
     * 新增题目信息（包含所有选项列表）
     *
     * @param examQuestion 题目信息
     */
    Long addQuestionInfo(ExamQuestion examQuestion);

    /**
     * 修改题目信息（包含所有选项列表）
     *
     * @param examQuestion 题目信息
     */
    void updateQuestionInfo(ExamQuestion examQuestion);

    /**
     * 删除题目（包含所有选项列表）
     *
     * @param id 题目ID
     */
    void deleteQuestion(Long id);

    /**
     * 根据id获取对象
     *
     * @param id
     * @return
     */
    SsExamQuestion getById(Long id);

    /**
     * 获取国内的题目（计划未出现题）
     *
     * @param questionNotTestVO
     * @return
     */
    List<SsExamQuestion> queryByDomesticWithNotTest(QuestionNotTestVO questionNotTestVO);

    /**
     * 获取国内+本省的题目（计划未出现题）
     *
     * @param questionNotTestVO
     * @return
     */
    List<SsExamQuestion> queryByDomesticAndTheProvinceWithNotTest(QuestionNotTestVO questionNotTestVO);

    /**
     * 获取国内+国际的题目（计划未出现题）
     *
     * @param questionNotTestVO
     * @return
     */
    List<SsExamQuestion> queryByDomesticAndInternationalWithNotTest(QuestionNotTestVO questionNotTestVO);

    /**
     * 获取国内+国际+本省的题目（计划未出现题）
     *
     * @param questionNotTestVO
     * @return
     */
    List<SsExamQuestion> queryByDomesticAndInternationalAndTheProvinceWithNotTest(QuestionNotTestVO questionNotTestVO);

    void update(SsExamQuestion ssExamQuestion);

    List<SsExamQuestion> queryByAreaWithAreaTypesWithTopics(String area, List<String> areaTypes, List<String> topics, String belongYearMonth);

    /**
     * 根据所属日期（月份，或者日期）模糊搜索
     *
     * @param belongDate
     * @return
     */
    List<SsExamQuestion> queryByLikeBelongDate(String belongDate);

    void logicDelete(Long questionId);

    /**
     * 随机取最近一年的10题，不包含ids
     *
     * @param ids
     * @return
     */
    List<SsExamQuestion> queryTenQuestionForLastYearByQuestionIdNotIn(List<Long> ids);

    /**
     * 随机取最近一年的10题
     *
     * @return
     */
    List<SsExamQuestion> queryTenQuestionForLastYear();

    /**
     * 获取传入日期最高更新的5题
     *
     * @param dateStr
     * @return
     */
    List<SsExamQuestion> findFiveQuestionByNowDate(String dateStr);
}
